package xrc.contract;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class MaskVoteContract extends Contract {
    public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b5061294e806100206000396000f300608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631b2ebab31461014e5780632417c1ee146101775780633be1b3c9146101a05780633ccf6173146101dd578063470e1afc1461020657806361c40a7a1461022f57806367420a421461026c5780636c65c70f146102a95780636ed84f19146102d2578063774a644a1461030f57806380db305b1461034c5780638a7b101d146103755780639deb17f5146103b2578063a0873373146103db578063a0acb9dd14610418578063a22626f514610455578063a709ce6e1461047e578063b0709a23146104bb578063c163bba7146104f8578063c173c75b14610521578063c4563ec51461054a578063ce0bd7e014610587578063d654bac5146105b0578063e8d5940d146105d9578063fb887c9514610602575b600080fd5b34801561015a57600080fd5b50610175600480360361017091908101906125e5565b61062b565b005b34801561018357600080fd5b5061019e600480360361019991908101906125e5565b61071c565b005b3480156101ac57600080fd5b506101c760048036036101c291908101906125e5565b61080d565b6040516101d491906127bd565b60405180910390f35b3480156101e957600080fd5b5061020460048036036101ff9190810190612651565b6108f9565b005b34801561021257600080fd5b5061022d60048036036102289190810190612579565b6109e7565b005b34801561023b57600080fd5b5061025660048036036102519190810190612538565b610a6b565b604051610263919061279b565b60405180910390f35b34801561027857600080fd5b50610293600480360361028e91908101906125e5565b610bbf565b6040516102a0919061279b565b60405180910390f35b3480156102b557600080fd5b506102d060048036036102cb9190810190612651565b610d7d565b005b3480156102de57600080fd5b506102f960048036036102f491908101906125e5565b610e6b565b604051610306919061279b565b60405180910390f35b34801561031b57600080fd5b5061033660048036036103319190810190612538565b611029565b604051610343919061279b565b60405180910390f35b34801561035857600080fd5b50610373600480360361036e91908101906125e5565b61117d565b005b34801561038157600080fd5b5061039c600480360361039791908101906125e5565b61126e565b6040516103a991906127bd565b60405180910390f35b3480156103be57600080fd5b506103d960048036036103d491908101906125e5565b61135a565b005b3480156103e757600080fd5b5061040260048036036103fd91908101906125e5565b61144b565b60405161040f919061279b565b60405180910390f35b34801561042457600080fd5b5061043f600480360361043a9190810190612538565b611609565b60405161044c919061279b565b60405180910390f35b34801561046157600080fd5b5061047c600480360361047791908101906125e5565b61175d565b005b34801561048a57600080fd5b506104a560048036036104a091908101906125e5565b61184e565b6040516104b291906127bd565b60405180910390f35b3480156104c757600080fd5b506104e260048036036104dd91908101906125e5565b61193a565b6040516104ef91906127bd565b60405180910390f35b34801561050457600080fd5b5061051f600480360361051a91908101906125e5565b611a26565b005b34801561052d57600080fd5b5061054860048036036105439190810190612579565b611dde565b005b34801561055657600080fd5b50610571600480360361056c9190810190612538565b611e62565b60405161057e919061279b565b60405180910390f35b34801561059357600080fd5b506105ae60048036036105a99190810190612579565b611fb6565b005b3480156105bc57600080fd5b506105d760048036036105d29190810190612651565b61203a565b005b3480156105e557600080fd5b5061060060048036036105fb91908101906125e5565b612128565b005b34801561060e57600080fd5b5061062960048036036106249190810190612579565b612219565b005b60016007826040518082805190602001908083835b6020831015156106655780518252602082019150602081019050602083039250610640565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156106ce57805182526020820191506020810190506020830392506106a9565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b6001600a826040518082805190602001908083835b6020831015156107565780518252602082019150602081019050602083039250610731565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156107bf578051825260208201915060208101905060208303925061079a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60006007826040518082805190602001908083835b6020831015156108475780518252602082019150602081019050602083039250610822565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156108b0578051825260208201915060208101905060208303925061088b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b806004836040518082805190602001908083835b602083101515610932578051825260208201915060208101905060208303925061090d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b60208310151561099b5780518252602082019150602081019050602083039250610976565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805190602001906109e192919061229d565b50505050565b806001836040518082805190602001908083835b602083101515610a2057805182526020820191506020810190506020830392506109fb565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610a6692919061229d565b505050565b60606001826040518082805190602001908083835b602083101515610aa55780518252602082019150602081019050602083039250610a80565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610bb4578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ba05780601f10610b7557610100808354040283529160200191610ba0565b820191906000526020600020905b815481529060010190602001808311610b8357829003601f168201915b505050505081526020019060010190610af8565b505050509050919050565b60606004826040518082805190602001908083835b602083101515610bf95780518252602082019150602081019050602083039250610bd4565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515610c625780518252602082019150602081019050602083039250610c3d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610d71578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d5d5780601f10610d3257610100808354040283529160200191610d5d565b820191906000526020600020905b815481529060010190602001808311610d4057829003601f168201915b505050505081526020019060010190610cb5565b50505050905092915050565b806003836040518082805190602001908083835b602083101515610db65780518252602082019150602081019050602083039250610d91565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b602083101515610e1f5780518252602082019150602081019050602083039250610dfa565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610e6592919061229d565b50505050565b60606003826040518082805190602001908083835b602083101515610ea55780518252602082019150602081019050602083039250610e80565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515610f0e5780518252602082019150602081019050602083039250610ee9565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b8282101561101d578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110095780601f10610fde57610100808354040283529160200191611009565b82","0191906000526020600020905b815481529060010190602001808311610fec57829003601f168201915b505050505081526020019060010190610f61565b50505050905092915050565b60606002826040518082805190602001908083835b602083101515611063578051825260208201915060208101905060208303925061103e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015611172578382906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561115e5780601f106111335761010080835404028352916020019161115e565b820191906000526020600020905b81548152906001019060200180831161114157829003601f168201915b5050505050815260200190600101906110b6565b505050509050919050565b60016007826040518082805190602001908083835b6020831015156111b75780518252602082019150602081019050602083039250611192565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561122057805182526020820191506020810190506020830392506111fb565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60006007826040518082805190602001908083835b6020831015156112a85780518252602082019150602081019050602083039250611283565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561131157805182526020820191506020810190506020830392506112ec565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b60016008826040518082805190602001908083835b602083101515611394578051825260208201915060208101905060208303925061136f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156113fd57805182526020820191506020810190506020830392506113d8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60606005826040518082805190602001908083835b6020831015156114855780518252602082019150602081019050602083039250611460565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156114ee57805182526020820191506020810190506020830392506114c9565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b828210156115fd578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b505050505081526020019060010190611541565b50505050905092915050565b60606000826040518082805190602001908083835b602083101515611643578051825260208201915060208101905060208303925061161e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015611752578382906000526020600020018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173e5780601f106117135761010080835404028352916020019161173e565b820191906000526020600020905b81548152906001019060200180831161172157829003601f168201915b505050505081526020019060010190611696565b505050509050919050565b60016007826040518082805190602001908083835b6020831015156117975780518252602082019150602081019050602083039250611772565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561180057805182526020820191506020810190506020830392506117db565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60006007826040518082805190602001908083835b6020831015156118885780518252602082019150602081019050602083039250611863565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156118f157805182526020820191506020810190506020830392506118cc565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b6000600a826040518082805190602001908083835b602083101515611974578051825260208201915060208101905060208303925061194f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156119dd57805182526020820191506020810190506020830392506119b8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b60006007826040518082805190602001908083835b602083101515611a605780518252602082019150602081019050602083039250611a3b565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611ac95780518252602082019150602081019050602083039250611aa4565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff02191690831515021790555060006008826040518082805190602001908083835b602083101515611b4d5780518252602082019150602081019050602083039250611b28565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611bb65780518252602082019150602081019050602083039250611b91565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff02191690831515021790555060006009826040518082805190602001908083835b602083101515611c3a5780518252602082019150602081019050602083039250611c15565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611ca35780518252602082019150602081019050602083039250611c7e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055506000600a826040518082805190602001908083835b602083101515611d275780518252602082019150602081019050602083039250611d02565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611d905780518252602082019150602081019050602083039250611d6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b806006836040518082805190602001908083835b602083101515611e175780518252602082019150602081019050602083039250611df2565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190611e5d92919061229d565b505050565b60606006826040518082805190602001908083835b602083101515611e9c5780518252602082019150602081019050602083039250611e77565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015611fab578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f975780601f10611f6c57610100808354040283529160200191611f97565b820191906000526020600020905b815481529060010190602001808311611f7a57829003601f168201915b505050505081526020019060010190611eef565b505050509050919050565b806000836040518082805190602001908083835b602083101515611fef578051825260208201915060","2081019050602083039250611fca565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061203592919061229d565b505050565b806005836040518082805190602001908083835b602083101515612073578051825260208201915060208101905060208303925061204e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b6020831015156120dc57805182526020820191506020810190506020830392506120b7565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061212292919061229d565b50505050565b60016009826040518082805190602001908083835b602083101515612162578051825260208201915060208101905060208303925061213d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156121cb57805182526020820191506020810190506020830392506121a6565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b806002836040518082805190602001908083835b602083101515612252578051825260208201915060208101905060208303925061222d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061229892919061229d565b505050565b8280548282559060005260206000209081019282156122ec579160200282015b828111156122eb5782518290805190602001906122db9291906122fd565b50916020019190600101906122bd565b5b5090506122f9919061237d565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061233e57805160ff191683800117855561236c565b8280016001018555821561236c579182015b8281111561236b578251825591602001919060010190612350565b5b50905061237991906123a9565b5090565b6123a691905b808211156123a2576000818161239991906123ce565b50600101612383565b5090565b90565b6123cb91905b808211156123c75760008160009055506001016123af565b5090565b90565b50805460018160011615610100020316600290046000825580601f106123f45750612413565b601f01602090049060005260206000209081019061241291906123a9565b5b50565b600082601f830112151561242957600080fd5b813561243c61243782612805565b6127d8565b9150818183526020840193506020810190508360005b838110156124825781358601612468888261248c565b845260208401935060208301925050600181019050612452565b5050505092915050565b600082601f830112151561249f57600080fd5b81356124b26124ad8261282d565b6127d8565b915080825260208301602083018583830111156124ce57600080fd5b6124d98382846128c1565b50505092915050565b600082601f83011215156124f557600080fd5b813561250861250382612859565b6127d8565b9150808252602083016020830185838301111561252457600080fd5b61252f8382846128c1565b50505092915050565b60006020828403121561254a57600080fd5b600082013567ffffffffffffffff81111561256457600080fd5b612570848285016124e2565b91505092915050565b6000806040838503121561258c57600080fd5b600083013567ffffffffffffffff8111156125a657600080fd5b6125b2858286016124e2565b925050602083013567ffffffffffffffff8111156125cf57600080fd5b6125db85828601612416565b9150509250929050565b600080604083850312156125f857600080fd5b600083013567ffffffffffffffff81111561261257600080fd5b61261e858286016124e2565b925050602083013567ffffffffffffffff81111561263b57600080fd5b612647858286016124e2565b9150509250929050565b60008060006060848603121561266657600080fd5b600084013567ffffffffffffffff81111561268057600080fd5b61268c868287016124e2565b935050602084013567ffffffffffffffff8111156126a957600080fd5b6126b5868287016124e2565b925050604084013567ffffffffffffffff8111156126d257600080fd5b6126de86828701612416565b9150509250925092565b60006126f382612892565b8084526020840193508360208202850161270c85612885565b60005b84811015612745578383038852612727838351612765565b9250612732826128a8565b915060208801975060018101905061270f565b508196508694505050505092915050565b61275f816128b5565b82525050565b60006127708261289d565b8084526127848160208601602086016128d0565b61278d81612903565b602085010191505092915050565b600060208201905081810360008301526127b581846126e8565b905092915050565b60006020820190506127d26000830184612756565b92915050565b6000604051905081810181811067ffffffffffffffff821117156127fb57600080fd5b8060405250919050565b600067ffffffffffffffff82111561281c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561284457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561287057600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b60008115159050919050565b82818337600083830152505050565b60005b838110156128ee5780820151818401526020810190506128d3565b838111156128fd576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058202f4c6254b974acaef64095852ea0b3277d1cd86f38435072592d85c08055f6136c6578706572696d656e74616cf50037"};

    public static final String BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b5061294e806100206000396000f300608060405260043610610149576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630ac33af91461014e5780631407ba671461018b5780631e6d54a0146101b4578063207a77ec146101f157806329b27bd41461021a5780632e49626c1461024357806345bc86531461028057806373a52ae8146102bd57806373cd0556146102fa5780637b4341eb146103375780637b7e301014610360578063861e091f146103895780638a6945e2146103b25780638b26f583146103ef578063964c0cd91461041857806396d17fe0146104415780639751ee121461047e578063a16a19bc146104a7578063a64b7042146104d0578063acef7e99146104f9578063ad3db6ed14610522578063ae9487271461054b578063dd7321fb14610588578063e4a65894146105c5578063fa5ab9ed14610602575b600080fd5b34801561015a57600080fd5b5061017560048036036101709190810190612538565b61062b565b604051610182919061279b565b60405180910390f35b34801561019757600080fd5b506101b260048036036101ad9190810190612579565b61077f565b005b3480156101c057600080fd5b506101db60048036036101d691908101906125e5565b610803565b6040516101e8919061279b565b60405180910390f35b3480156101fd57600080fd5b5061021860048036036102139190810190612651565b6109c1565b005b34801561022657600080fd5b50610241600480360361023c91908101906125e5565b610aaf565b005b34801561024f57600080fd5b5061026a600480360361026591908101906125e5565b610ba0565b604051610277919061279b565b60405180910390f35b34801561028c57600080fd5b506102a760048036036102a29190810190612538565b610d5e565b6040516102b4919061279b565b60405180910390f35b3480156102c957600080fd5b506102e460048036036102df9190810190612538565b610eb2565b6040516102f1919061279b565b60405180910390f35b34801561030657600080fd5b50610321600480360361031c91908101906125e5565b611006565b60405161032e919061279b565b60405180910390f35b34801561034357600080fd5b5061035e60048036036103599190810190612579565b6111c4565b005b34801561036c57600080fd5b5061038760048036036103829190810190612579565b611248565b005b34801561039557600080fd5b506103b060048036036103ab91908101906125e5565b6112cc565b005b3480156103be57600080fd5b506103d960048036036103d49190810190612538565b6113bd565b6040516103e6919061279b565b60405180910390f35b3480156103fb57600080fd5b50610416600480360361041191908101906125e5565b611511565b005b34801561042457600080fd5b5061043f600480360361043a9190810190612651565b611602565b005b34801561044d57600080fd5b50610468600480360361046391908101906125e5565b6116f0565b60405161047591906127bd565b60405180910390f35b34801561048a57600080fd5b506104a560048036036104a09190810190612579565b6117dc565b005b3480156104b357600080fd5b506104ce60048036036104c991908101906125e5565b611860565b005b3480156104dc57600080fd5b506104f760048036036104f291908101906125e5565b611c18565b005b34801561050557600080fd5b50610520600480360361051b91908101906125e5565b611d09565b005b34801561052e57600080fd5b50610549600480360361054491908101906125e5565b611dfa565b005b34801561055757600080fd5b50610572600480360361056d91908101906125e5565b611eeb565b60405161057f91906127bd565b60405180910390f35b34801561059457600080fd5b506105af60048036036105aa91908101906125e5565b611fd7565b6040516105bc91906127bd565b60405180910390f35b3480156105d157600080fd5b506105ec60048036036105e791908101906125e5565b6120c3565b6040516105f991906127bd565b60405180910390f35b34801561060e57600080fd5b5061062960048036036106249190810190612651565b6121af565b005b60606006826040518082805190602001908083835b6020831015156106655780518252602082019150602081019050602083039250610640565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610774578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107605780601f1061073557610100808354040283529160200191610760565b820191906000526020600020905b81548152906001019060200180831161074357829003601f168201915b5050505050815260200190600101906106b8565b505050509050919050565b806001836040518082805190602001908083835b6020831015156107b85780518252602082019150602081019050602083039250610793565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805190602001906107fe92919061229d565b505050565b60606003826040518082805190602001908083835b60208310151561083d5780518252602082019150602081019050602083039250610818565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156108a65780518252602082019150602081019050602083039250610881565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b828210156109b5578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109a15780601f10610976576101008083540402835291602001916109a1565b820191906000526020600020905b81548152906001019060200180831161098457829003601f168201915b5050505050815260200190600101906108f9565b50505050905092915050565b806003836040518082805190602001908083835b6020831015156109fa57805182526020820191506020810190506020830392506109d5565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b602083101515610a635780518252602082019150602081019050602083039250610a3e565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080519060200190610aa992919061229d565b50505050565b60016008826040518082805190602001908083835b602083101515610ae95780518252602082019150602081019050602083039250610ac4565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515610b525780518252602082019150602081019050602083039250610b2d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60606004826040518082805190602001908083835b602083101515610bda5780518252602082019150602081019050602083039250610bb5565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515610c435780518252602082019150602081019050602083039250610c1e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610d52578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d3e5780601f10610d1357610100808354040283529160200191610d3e565b820191906000526020600020905b815481529060010190602001808311610d2157829003601f168201915b505050505081526020019060010190610c96565b50505050905092915050565b60606000826040518082805190602001908083835b602083101515610d985780518252602082019150602081019050602083039250610d73565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610ea7578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e935780601f10610e6857610100808354040283529160200191610e93565b820191906000526020600020905b815481529060010190602001808311610e7657829003601f168201915b505050505081526020019060010190610deb565b505050509050919050565b60606001826040518082805190602001908083835b602083101515610eec5780518252602082019150602081019050602083039250610ec7565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015610ffb578382906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fe75780601f10610fbc57610100808354040283529160200191610fe7565b820191906000526020600020905b815481529060010190602001808311610fca578290","03601f168201915b505050505081526020019060010190610f3f565b505050509050919050565b60606005826040518082805190602001908083835b602083101515611040578051825260208201915060208101905060208303925061101b565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156110a95780518252602082019150602081019050602083039250611084565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b828210156111b8578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156111a45780601f10611179576101008083540402835291602001916111a4565b820191906000526020600020905b81548152906001019060200180831161118757829003601f168201915b5050505050815260200190600101906110fc565b50505050905092915050565b806006836040518082805190602001908083835b6020831015156111fd57805182526020820191506020810190506020830392506111d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061124392919061229d565b505050565b806000836040518082805190602001908083835b602083101515611281578051825260208201915060208101905060208303925061125c565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805190602001906112c792919061229d565b505050565b60016007826040518082805190602001908083835b60208310151561130657805182526020820191506020810190506020830392506112e1565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561136f578051825260208201915060208101905060208303925061134a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60606002826040518082805190602001908083835b6020831015156113f757805182526020820191506020810190506020830392506113d2565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020805480602002602001604051908101604052809291908181526020016000905b82821015611506578382906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114f25780601f106114c7576101008083540402835291602001916114f2565b820191906000526020600020905b8154815290600101906020018083116114d557829003601f168201915b50505050508152602001906001019061144a565b505050509050919050565b60016007826040518082805190602001908083835b60208310151561154b5780518252602082019150602081019050602083039250611526565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156115b4578051825260208201915060208101905060208303925061158f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b806005836040518082805190602001908083835b60208310151561163b5780518252602082019150602081019050602083039250611616565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b6020831015156116a4578051825260208201915060208101905060208303925061167f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805190602001906116ea92919061229d565b50505050565b60006007826040518082805190602001908083835b60208310151561172a5780518252602082019150602081019050602083039250611705565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611793578051825260208201915060208101905060208303925061176e565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b806002836040518082805190602001908083835b60208310151561181557805182526020820191506020810190506020830392506117f0565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061185b92919061229d565b505050565b60006007826040518082805190602001908083835b60208310151561189a5780518252602082019150602081019050602083039250611875565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561190357805182526020820191506020810190506020830392506118de565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff02191690831515021790555060006008826040518082805190602001908083835b6020831015156119875780518252602082019150602081019050602083039250611962565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156119f057805182526020820191506020810190506020830392506119cb565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff02191690831515021790555060006009826040518082805190602001908083835b602083101515611a745780518252602082019150602081019050602083039250611a4f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611add5780518252602082019150602081019050602083039250611ab8565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055506000600a826040518082805190602001908083835b602083101515611b615780518252602082019150602081019050602083039250611b3c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611bca5780518252602082019150602081019050602083039250611ba5565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60016007826040518082805190602001908083835b602083101515611c525780518252602082019150602081019050602083039250611c2d565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611cbb5780518252602082019150602081019050602083039250611c96565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b6001600a826040518082805190602001908083835b602083101515611d435780518252602082019150602081019050602083039250611d1e565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611dac5780518252602082019150602081019050602083039250611d87565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60016009826040518082805190602001908083835b602083101515611e345780518252602082019150602081019050602083039250611e0f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611e9d5780518252602082019150602081019050602083039250611e78565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055505050565b60006007826040518082805190602001908083835b602083101515611f255780518252602082019150602081019050602083039250611f00565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b602083101515611f8e5780518252602082019150602081019050602083039250611f69565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b6000600a82604051","8082805190602001908083835b6020831015156120115780518252602082019150602081019050602083039250611fec565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b60208310151561207a5780518252602082019150602081019050602083039250612055565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b60006007826040518082805190602001908083835b6020831015156120fd57805182526020820191506020810190506020830392506120d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020836040518082805190602001908083835b6020831015156121665780518252602082019150602081019050602083039250612141565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff16905092915050565b806004836040518082805190602001908083835b6020831015156121e857805182526020820191506020810190506020830392506121c3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020846040518082805190602001908083835b602083101515612251578051825260208201915060208101905060208303925061222c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051906020019061229792919061229d565b50505050565b8280548282559060005260206000209081019282156122ec579160200282015b828111156122eb5782518290805190602001906122db9291906122fd565b50916020019190600101906122bd565b5b5090506122f9919061237d565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061233e57805160ff191683800117855561236c565b8280016001018555821561236c579182015b8281111561236b578251825591602001919060010190612350565b5b50905061237991906123a9565b5090565b6123a691905b808211156123a2576000818161239991906123ce565b50600101612383565b5090565b90565b6123cb91905b808211156123c75760008160009055506001016123af565b5090565b90565b50805460018160011615610100020316600290046000825580601f106123f45750612413565b601f01602090049060005260206000209081019061241291906123a9565b5b50565b600082601f830112151561242957600080fd5b813561243c61243782612805565b6127d8565b9150818183526020840193506020810190508360005b838110156124825781358601612468888261248c565b845260208401935060208301925050600181019050612452565b5050505092915050565b600082601f830112151561249f57600080fd5b81356124b26124ad8261282d565b6127d8565b915080825260208301602083018583830111156124ce57600080fd5b6124d98382846128c1565b50505092915050565b600082601f83011215156124f557600080fd5b813561250861250382612859565b6127d8565b9150808252602083016020830185838301111561252457600080fd5b61252f8382846128c1565b50505092915050565b60006020828403121561254a57600080fd5b600082013567ffffffffffffffff81111561256457600080fd5b612570848285016124e2565b91505092915050565b6000806040838503121561258c57600080fd5b600083013567ffffffffffffffff8111156125a657600080fd5b6125b2858286016124e2565b925050602083013567ffffffffffffffff8111156125cf57600080fd5b6125db85828601612416565b9150509250929050565b600080604083850312156125f857600080fd5b600083013567ffffffffffffffff81111561261257600080fd5b61261e858286016124e2565b925050602083013567ffffffffffffffff81111561263b57600080fd5b612647858286016124e2565b9150509250929050565b60008060006060848603121561266657600080fd5b600084013567ffffffffffffffff81111561268057600080fd5b61268c868287016124e2565b935050602084013567ffffffffffffffff8111156126a957600080fd5b6126b5868287016124e2565b925050604084013567ffffffffffffffff8111156126d257600080fd5b6126de86828701612416565b9150509250925092565b60006126f382612892565b8084526020840193508360208202850161270c85612885565b60005b84811015612745578383038852612727838351612765565b9250612732826128a8565b915060208801975060018101905061270f565b508196508694505050505092915050565b61275f816128b5565b82525050565b60006127708261289d565b8084526127848160208601602086016128d0565b61278d81612903565b602085010191505092915050565b600060208201905081810360008301526127b581846126e8565b905092915050565b60006020820190506127d26000830184612756565b92915050565b6000604051905081810181811067ffffffffffffffff821117156127fb57600080fd5b8060405250919050565b600067ffffffffffffffff82111561281c57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561284457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561287057600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b60008115159050919050565b82818337600083830152505050565b60005b838110156128ee5780820151818401526020810190506128d3565b838111156128fd576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058206120f0b35d448909d34044bd429135f12f3c5d94a7adabe68dc3ca9bca07051a6c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"addPrevote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"addPrecount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getVerifyFlag\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"},{\"name\":\"secretedVote\",\"type\":\"string[]\"}],\"name\":\"addSecVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"Ci\",\"type\":\"string[]\"}],\"name\":\"addC\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"getC\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getSecVote\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voterId\",\"type\":\"string\"},{\"name\":\"Fi\",\"type\":\"string[]\"}],\"name\":\"addF\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voterId\",\"type\":\"string\"}],\"name\":\"getF\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getY\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"addVerifyFlag\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getPrevote\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"verify\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getg_R\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"}],\"name\":\"getA\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"addVoteFlag\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getVoteFlag\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getPrecount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"publish\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"voteEventId\",\"type\":\"string\"},{\"name\":\"mixed\",\"type\":\"string[]\"}],\"name\":\"addMixedVote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"getMixedVote\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"Ai\",\"type\":\"string[]\"}],\"name\":\"addA\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"},{\"name\":\"g_RI\",\"type\":\"string[]\"}],\"name\":\"addg_R\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"voteEventId\",\"type\":\"string\"}],\"name\":\"vote\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"voteEventId\",\"type\":\"string\"},{\"name\":\"Yi\",\"type\":\"string[]\"}],\"name\":\"addY\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};

    public static final String ABI = org.fisco.bcos.sdk.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_ADDPREVOTE = "addPrevote";

    public static final String FUNC_ADDPRECOUNT = "addPrecount";

    public static final String FUNC_GETVERIFYFLAG = "getVerifyFlag";

    public static final String FUNC_ADDSECVOTE = "addSecVote";

    public static final String FUNC_ADDC = "addC";

    public static final String FUNC_GETC = "getC";

    public static final String FUNC_GETSECVOTE = "getSecVote";

    public static final String FUNC_ADDF = "addF";

    public static final String FUNC_GETF = "getF";

    public static final String FUNC_GETY = "getY";

    public static final String FUNC_ADDVERIFYFLAG = "addVerifyFlag";

    public static final String FUNC_GETPREVOTE = "getPrevote";

    public static final String FUNC_VERIFY = "verify";

    public static final String FUNC_GETG_R = "getg_R";

    public static final String FUNC_GETA = "getA";

    public static final String FUNC_ADDVOTEFLAG = "addVoteFlag";

    public static final String FUNC_GETVOTEFLAG = "getVoteFlag";

    public static final String FUNC_GETPRECOUNT = "getPrecount";

    public static final String FUNC_PUBLISH = "publish";

    public static final String FUNC_ADDMIXEDVOTE = "addMixedVote";

    public static final String FUNC_GETMIXEDVOTE = "getMixedVote";

    public static final String FUNC_ADDA = "addA";

    public static final String FUNC_ADDG_R = "addg_R";

    public static final String FUNC_VOTE = "vote";

    public static final String FUNC_ADDY = "addY";

    protected MaskVoteContract(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public TransactionReceipt addPrevote(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDPREVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addPrevote(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDPREVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddPrevote(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDPREVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddPrevoteInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDPREVOTE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public TransactionReceipt addPrecount(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDPRECOUNT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addPrecount(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDPRECOUNT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddPrecount(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDPRECOUNT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddPrecountInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDPRECOUNT,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public Boolean getVerifyFlag(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETVERIFYFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt addSecVote(String id, String voteEventId, List<String> secretedVote) {
        final Function function = new Function(
                FUNC_ADDSECVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        secretedVote.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(secretedVote, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addSecVote(String id, String voteEventId, List<String> secretedVote, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDSECVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        secretedVote.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(secretedVote, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddSecVote(String id, String voteEventId, List<String> secretedVote) {
        final Function function = new Function(
                FUNC_ADDSECVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        secretedVote.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(secretedVote, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, List<String>> getAddSecVoteInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDSECVOTE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, List<String>>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                convertToNative((List<Utf8String>) results.get(2).getValue())
        );
    }

    public TransactionReceipt addC(String id, List<String> Ci) {
        final Function function = new Function(
                FUNC_ADDC,
                Arrays.<Type>asList(new Utf8String(id),
                        Ci.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ci, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addC(String id, List<String> Ci, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDC,
                Arrays.<Type>asList(new Utf8String(id),
                        Ci.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ci, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddC(String id, List<String> Ci) {
        final Function function = new Function(
                FUNC_ADDC,
                Arrays.<Type>asList(new Utf8String(id),
                        Ci.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ci, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, List<String>> getAddCInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDC,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<String>>(

                (String) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue())
        );
    }

    public List getC(String id) throws ContractException {
        final Function function = new Function(FUNC_GETC,
                Arrays.<Type>asList(new Utf8String(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public List getSecVote(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETSECVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt addF(String id, String voterId, List<String> Fi) {
        final Function function = new Function(
                FUNC_ADDF,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voterId),
                        Fi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Fi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addF(String id, String voterId, List<String> Fi, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDF,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voterId),
                        Fi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Fi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddF(String id, String voterId, List<String> Fi) {
        final Function function = new Function(
                FUNC_ADDF,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voterId),
                        Fi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Fi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, List<String>> getAddFInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDF,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, List<String>>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                convertToNative((List<Utf8String>) results.get(2).getValue())
        );
    }

    public List getF(String id, String voterId) throws ContractException {
        final Function function = new Function(FUNC_GETF,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voterId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public List getY(String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETY,
                Arrays.<Type>asList(new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt addVerifyFlag(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDVERIFYFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addVerifyFlag(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDVERIFYFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddVerifyFlag(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDVERIFYFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddVerifyFlagInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDVERIFYFLAG,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public Boolean getPrevote(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETPREVOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt verify(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_VERIFY,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] verify(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_VERIFY,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForVerify(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_VERIFY,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getVerifyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_VERIFY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public List getg_R(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETG_R,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public List getA(String id) throws ContractException {
        final Function function = new Function(FUNC_GETA,
                Arrays.<Type>asList(new Utf8String(id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt addVoteFlag(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDVOTEFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addVoteFlag(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDVOTEFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddVoteFlag(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_ADDVOTEFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getAddVoteFlagInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDVOTEFLAG,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public Boolean getVoteFlag(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETVOTEFLAG,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public Boolean getPrecount(String id, String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETPRECOUNT,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public TransactionReceipt publish(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_PUBLISH,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] publish(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_PUBLISH,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForPublish(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_PUBLISH,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getPublishInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_PUBLISH,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public TransactionReceipt addMixedVote(String voteEventId, List<String> mixed) {
        final Function function = new Function(
                FUNC_ADDMIXEDVOTE,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        mixed.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(mixed, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addMixedVote(String voteEventId, List<String> mixed, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDMIXEDVOTE,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        mixed.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(mixed, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddMixedVote(String voteEventId, List<String> mixed) {
        final Function function = new Function(
                FUNC_ADDMIXEDVOTE,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        mixed.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(mixed, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, List<String>> getAddMixedVoteInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDMIXEDVOTE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<String>>(

                (String) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue())
        );
    }

    public List getMixedVote(String voteEventId) throws ContractException {
        final Function function = new Function(FUNC_GETMIXEDVOTE,
                Arrays.<Type>asList(new Utf8String(voteEventId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt addA(String id, List<String> Ai) {
        final Function function = new Function(
                FUNC_ADDA,
                Arrays.<Type>asList(new Utf8String(id),
                        Ai.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ai, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addA(String id, List<String> Ai, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDA,
                Arrays.<Type>asList(new Utf8String(id),
                        Ai.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ai, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddA(String id, List<String> Ai) {
        final Function function = new Function(
                FUNC_ADDA,
                Arrays.<Type>asList(new Utf8String(id),
                        Ai.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Ai, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, List<String>> getAddAInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDA,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<String>>(

                (String) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue())
        );
    }

    public TransactionReceipt addg_R(String id, String voteEventId, List<String> g_RI) {
        final Function function = new Function(
                FUNC_ADDG_R,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        g_RI.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(g_RI, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addg_R(String id, String voteEventId, List<String> g_RI, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDG_R,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        g_RI.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(g_RI, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddg_R(String id, String voteEventId, List<String> g_RI) {
        final Function function = new Function(
                FUNC_ADDG_R,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId),
                        g_RI.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(g_RI, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<String, String, List<String>> getAddg_RInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDG_R,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, String, List<String>>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                convertToNative((List<Utf8String>) results.get(2).getValue())
        );
    }

    public TransactionReceipt vote(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_VOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] vote(String id, String voteEventId, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_VOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForVote(String id, String voteEventId) {
        final Function function = new Function(
                FUNC_VOTE,
                Arrays.<Type>asList(new Utf8String(id),
                        new Utf8String(voteEventId)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, String> getVoteInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_VOTE,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Utf8String>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, String>(

                (String) results.get(0).getValue(),
                (String) results.get(1).getValue()
        );
    }

    public TransactionReceipt addY(String voteEventId, List<String> Yi) {
        final Function function = new Function(
                FUNC_ADDY,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        Yi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Yi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public byte[] addY(String voteEventId, List<String> Yi, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDY,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        Yi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Yi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddY(String voteEventId, List<String> Yi) {
        final Function function = new Function(
                FUNC_ADDY,
                Arrays.<Type>asList(new Utf8String(voteEventId),
                        Yi.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                                org.fisco.bcos.sdk.abi.Utils.typeMap(Yi, Utf8String.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, List<String>> getAddYInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDY,
                Arrays.<Type>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<String>>(

                (String) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue())
        );
    }

    public static MaskVoteContract load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new MaskVoteContract(contractAddress, client, credential);
    }

    public static MaskVoteContract deploy(Client client, CryptoKeyPair credential) throws ContractException {
        return deploy(MaskVoteContract.class, client, credential, getBinary(client.getCryptoSuite()), "");
    }
}
